package com.ricks.config;

import com.jfinal.config.*;
import com.jfinal.plugin.activerecord.ActiveRecordPlugin;
import com.jfinal.plugin.activerecord.Db;
import com.jfinal.plugin.activerecord.dialect.Sqlite3Dialect;
import com.jfinal.plugin.druid.DruidPlugin;
import com.jfinal.template.Engine;
import com.ricks.contoller.AdminController;
import com.ricks.contoller.IndexController;
import com.ricks.contoller.LoginController;
import com.ricks.model.User;

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

public class GameConfig  extends JFinalConfig {
    @Override
    public void configConstant(Constants constants) {
        System.out.println("✅ JFinalConfig 已加载！");

        // 设置为开发模式，便于调试
        constants.setDevMode(true);
    }

    @Override
    public void configRoute(Routes routes) {
        // 设置控制器路由，将 / 请求映射到 IndexController 的 index 方法
        routes.add("/", IndexController.class);
        routes.add("/login", LoginController.class,"");
        routes.add("/admin", AdminController.class,"");
        // 路由扫描，jfinal 4.9.03 新增功能。参数 "com.xxx." 表示扫描被限定的包名，
        // 扫描仅会在该包以及该包的子包下进行
    }

    @Override
    public void configEngine(Engine engine) {
        // 配置 Enjoy 模板引擎，模板文件默认在 src/main/webapp 目录下
        engine.setDevMode(true);
        engine.setBaseTemplatePath("src/main/webapp"); // 关键路径配置
    }


    // 其他配置方法（插件、拦截器等）可根据需要实现
//    @Override
//    public void configPlugin(Plugins me) {
//        // SQLite 连接配置
//        String url = "jdbc:sqlite:D:/database/ricks.sqlite"; // 数据库文件路径
//        DruidPlugin druidPlugin = new DruidPlugin(url, "", ""); // SQLite 无需用户名密码
//        me.add(druidPlugin);
//
//        // 配置 ActiveRecord 插件
//        ActiveRecordPlugin arp = new ActiveRecordPlugin(druidPlugin);
//        arp.setDialect(new Sqlite3Dialect()); // 指定方言
//        // 映射表到 Model（示例）
//        arp.addMapping("user", User.class);
//        me.add(arp);
//
//    }

    @Override
    public void configPlugin(Plugins me) {
        // 1. 初始化Druid连接池
        String url = "jdbc:sqlite:D:/database/ricks.sqlite";
        DruidPlugin druidPlugin = new DruidPlugin(url, "", "");
        me.add(druidPlugin);
        druidPlugin.start();



        // 2. 手动建表（在ARP启动前）
        try (Connection conn = druidPlugin.getDataSource().getConnection()) {
            Statement stmt = conn.createStatement();
            // 检查表是否存在
            ResultSet rs = stmt.executeQuery(
                    "SELECT COUNT(*) FROM sqlite_master WHERE type='table' AND name='user'"
            );
            if (rs.next() && rs.getInt(1) == 0) {
                stmt.executeUpdate(
                        "CREATE TABLE user (" +
                                "id INTEGER PRIMARY KEY AUTOINCREMENT, " +
                                "username TEXT NOT NULL, " +
                                "password TEXT NOT NULL)"
                );
                System.out.println("✅ 表 'user' 创建成功");
            }
        } catch (SQLException e) {
            throw new RuntimeException("建表失败: " + e.getMessage());
        }

        // 3. 配置ActiveRecordPlugin
        ActiveRecordPlugin arp = new ActiveRecordPlugin(druidPlugin);
        arp.setDialect(new Sqlite3Dialect()); // 使用自定义方言
        arp.addMapping("user", User.class);
        arp.setShowSql(true);  // 打印生成的 SQL
        me.add(arp);
    }

//    public void afterJFinalStart() {
//        String tableName = "user";
//        // 检查表是否存在
//        boolean exists = Db.queryInt("SELECT COUNT(*) FROM sqlite_master WHERE type='table' AND name=?", tableName) > 0;
//
//        if (!exists) {
//            // 动态创建表（支持复杂SQL）
//            String sql = "CREATE TABLE user ("
//                    + "id INTEGER PRIMARY KEY AUTOINCREMENT, "
//                    + "name TEXT NOT NULL, "
//                    + "email TEXT UNIQUE)";
//            Db.update(sql);
//        }
//    }


    @Override
    public void configInterceptor(Interceptors interceptors) {

    }

    @Override
    public void configHandler(Handlers handlers) {

    }
}
